package com.itcast.demo.simple;

import java.util.Stack;

/**
 * 给出一个仅包含字符'(',')','{','}','['和']',的字符串，判断给出的字符串是否是合法的括号序列
 * 括号必须以正确的顺序关闭，"()"和"()[]{}"都是合法的括号序列，但"(]"和"([)]"不合法。
 *
 * @author zheng.zhang
 */
public class Test4 {
    public static void main(String[] args) {
        Test4 test4 = new Test4();
        boolean valid = test4.isValid("[([()]{[]}){([])}]");
        String s = "";
        double d = 5.3e12;
        s += "1";
        s += "2";
        System.out.println(s);
        System.out.println(valid);
    }

    /**
     *
     * @param s string字符串
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // 判断字符串是否合法
        if (s == null) {
            return false;
        }
        Stack<Character> stack = new Stack<>();
        for (char c : s.toCharArray()) {
            // 匹配括号依次入栈
            if (c == '(') {
                stack.push(')');
            } else if (c == '[') {
                stack.push(']');
            } else if (c == '{') {
                stack.push('}');
            } else if (stack.isEmpty() || stack.pop() != c) {
                return false;
            }
        }
        return stack.empty();
    }
}
